<?php
/**
 * 数组排序方法
 * @author  黄明杰 vx:HMJ125855
 * @version 20190101
 * @param   Array    	$Type   排序数组
 * @param   String    	$Key    排序下标
 * @param   Function 	$Order  升序降序(SORT_ASC:升序,SORT_DESC:降序)
 * @param   Function    $Type   排序类型(具体百度)
 * @return  Array
 */
function arrayMultisort($Array, $Key, $Order = SORT_ASC, $Type = SORT_NUMERIC){
    if(is_array($Array)){
        foreach($Array as $k){
            if(is_array($k)){
                $KeyArray[] = $k[$Key];
            }else{
                return false;
            }
        }
    }else{
        return false;
    }
    
    array_multisort($KeyArray, $Order, $Type, $Array);
    
    return $Array;
}

/**
 * 模拟Post方法
 * @author  黄明杰 vx:HMJ125855
 * @param   String      $Urls   请求地址
 * @param   Array       $Data   发送参数
 * @param   Boolean     $Debug  是否调试
 * @return  Array
 * @version 20190101
 */
function CurlPost($Urls, $Data = array(), $Debug = false){
    $NowTime = time();//请求时间

    $Ch = curl_init();//打开CURL

    //设置一个头部
    $Header = array();
    $Header[] = "Content-Type: application/json; charset=UTF-8";

    curl_setopt($Ch, CURLOPT_HTTPHEADER, $Header);//设置HTTP头字段数组
    curl_setopt($Ch, CURLOPT_URL, $Urls);//需要获取的URL地址
    curl_setopt($Ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($Ch, CURLOPT_HEADER, FALSE);//启用时会将头文件的信息作为数据流输出
    curl_setopt($Ch, CURLOPT_POST, true);//启用时会发送一个常规的POST请求
    curl_setopt($Ch, CURLOPT_POSTFIELDS, $Data);//全部数据使用HTTP协议中的"POST"操作来发送
    curl_setopt($Ch, CURLOPT_RETURNTRANSFER, 1);//将curl_exec()获取的信息以文件流的形式返回，而不是直接输出
    curl_setopt($Ch, CURLOPT_CONNECTTIMEOUT, 30);//在发起连接前等待的时间，如果设置为0，则无限等待
    curl_setopt($Ch, CURLOPT_SSL_VERIFYPEER, FALSE);//禁用后CURL将终止从服务端进行验证
    curl_setopt($Ch, CURLOPT_SSL_VERIFYHOST, FALSE);//检查服务器SSL证书中是否存在一个公用名

    $Result = curl_exec($Ch);//获取内容

    $Back['back_info'] = json_decode($Result, true);//返回内容
    $Back['back_code'] = curl_getinfo($Ch, CURLINFO_HTTP_CODE);//请求码
    $Back['back_erro'] = curl_errno($Ch);//错误码

    curl_close($Ch);//关闭CURL

    $EndTime = time();//结束时间

    $SubTime = $EndTime - $NowTime;

    $Back['back_time'] = '当前CurlPost请求时间为：'.$SubTime.' 秒，请求地址：'.$Urls;

    //返回结果
    if(!$Debug){
        return $Back['back_info'];
    }else{
        return $Back;
    }
}

/**
 * 模拟Get方法
 * @author  黄明杰 vx:HMJ125855
 * @param   String      $Urls   请求地址
 * @param   Boolean     $Debug  是否调试
 * @return  Array
 * @version 20190101
 */
function CurlGet($Urls, $Debug = false){
    $NowTime = time();//请求时间

    $Ch = curl_init();//打开CURL

    curl_setopt($Ch, CURLOPT_URL, $Urls);//需要获取的URL地址
    curl_setopt($Ch, CURLOPT_CUSTOMREQUEST, "GET");
    curl_setopt($Ch, CURLOPT_TIMEOUT, 6);//设置CURL允许执行的最长秒数。
    curl_setopt($Ch, CURLOPT_FOLLOWLOCATION, 1);//启用时会将服务器服务器返回的"Location: "放在header中递归的返回给服务器
    curl_setopt($Ch, CURLOPT_AUTOREFERER, 1);//当根据Location:重定向时，自动设置header中的Referer:信息
    curl_setopt($Ch, CURLOPT_RETURNTRANSFER, true);//将curl_exec()获取的信息以文件流的形式返回，而不是直接输出
    curl_setopt($Ch, CURLOPT_SSL_VERIFYPEER, false);//禁用后CURL将终止从服务端进行验证
    curl_setopt($Ch, CURLOPT_SSL_VERIFYHOST, false);//检查服务器SSL证书中是否存在一个公用名

    $Result = curl_exec($Ch);//获取内容

    $Back['back_info'] = json_decode($Result, true);//返回内容
    $Back['back_code'] = curl_getinfo($Ch, CURLINFO_HTTP_CODE);//请求码
    $Back['back_erro'] = curl_errno($Ch);//错误码

    curl_close ($Ch);//关闭CURL

    $EndTime = time();//结束时间

    $SubTime = $EndTime - $NowTime;

    $Back['back_time'] = '当前CurlGet请求时间为：'.$SubTime.' 秒，请求地址：'.$Urls;

    //返回结果
    if(!$Debug){
        return $Back['back_info'];
    }else{
        return $Back;
    }
}